﻿Imports Microsoft.DirectX.Direct3D
Imports Microsoft.DirectX
Imports Commander_Wars.Spieletools
Public MustInherit Class ObjektAnimation
    Protected Shared Texturen As Textur() = {}
    Structure Textur
        Public Sub New(ByVal Texturname As String, ByVal Ordner As String, ByVal Frames As Integer)
            Texturnamen = Texturname
            Dim B As Image
            If Hauptmenü.ZoomedIn Then
                If My.Computer.FileSystem.FileExists(My.Settings.Resourcenpfad + Ordner + "\Zoomed In\" + Texturname + ".png") Then
                    B = Image.FromFile(My.Settings.Resourcenpfad + Ordner + "\Zoomed In\" + Texturname + ".png")
                Else
                    B = Image.FromFile(My.Settings.Resourcenpfad + Ordner + "\" + Texturname + ".png")
                End If
            Else
                If My.Computer.FileSystem.FileExists(My.Settings.Resourcenpfad + Ordner + "\Zoomed Out\" + Texturname + ".png") Then
                    B = Image.FromFile(My.Settings.Resourcenpfad + Ordner + "\Zoomed Out\" + Texturname + ".png")
                Else
                    B = Image.FromFile(My.Settings.Resourcenpfad + Ordner + "\" + Texturname + ".png")
                End If
            End If
            EinzelBildGrößen.Width = B.Width / (Frames + 1)
            EinzelBildGrößen.Height = B.Height
            TexturBilde = Grafikengine.LoadTexture(B)
        End Sub
        Private Texturnamen As String
        Public ReadOnly Property Texturname() As String
            Get
                Return Texturnamen
            End Get
        End Property
        Private TexturBilde As Texture
        Public ReadOnly Property TexturBild() As Texture
            Get
                Return TexturBilde
            End Get
        End Property
        Public Shared Function GetTextur(ByVal Id As Integer) As Texture
            Return Texturen(Id).TexturBilde
        End Function
        Private EinzelBildGrößen As Size
        Public ReadOnly Property EinzelbildGröße() As Size
            Get
                Return EinzelBildGrößen
            End Get
        End Property

    End Structure
    Protected BildID As Integer
    Protected FM As Boolean = True
    Protected Frames As Integer
    Protected Frame As Integer
    Public P As PointF
    Public Schlacht As Integer
    Protected InFeldern As Boolean = True
    Protected Function LoadTextur(ByVal Name As String, ByVal Frames As Integer, Optional ByVal Ordner As String = "Animationen") As Integer
        For I = 0 To Texturen.Length - 1
            If Texturen(I).Texturname = Name Then
                Return I
            End If
        Next
        Array.Resize(Texturen, Texturen.Length + 1)
        Texturen(Texturen.Length - 1) = New Textur(Name, Ordner, Frames)
        Return Texturen.Length - 1
    End Function
    Public Overridable Function Malen(ByVal intColor As Color, Optional ByVal Zoomfaktor As Single = 1) As Boolean
        'Welchen Teil des Bildes wir malen wollen
        Dim sngRotation As Double = 0
        Dim T As Textur = Texturen(BildID)
        If FM = True Then
            With Grafikengine.recBild
                .X = T.EinzelbildGröße.Width * Frame : .Width = T.EinzelbildGröße.Width
                .Y = 0 : .Height = T.EinzelbildGröße.Height
            End With
        Else
            With Grafikengine.recBild
                .X = 0 : .Width = T.EinzelbildGröße.Width
                .Y = 0 : .Height = T.EinzelbildGröße.Height
            End With
        End If
        With Grafikengine.ptfRotCenter
            .X = T.EinzelbildGröße.Width / 2 * Zoomfaktor
            .Y = T.EinzelbildGröße.Height / 2 * Zoomfaktor
        End With
        If InFeldern = True Then
            Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY)
        Else
            Grafikengine.ptfPosition = New Drawing.Point(P.X + Objektverwalter.Spielfeld.BildschirmKooX, P.Y + Objektverwalter.Spielfeld.BildschirmKooY)
        End If
        'Ausschnitte in den Backbuffer zeichnen
        'Wo wird das Bild gezeichnet
        '16 ist die Breite eines Feldes 8 die Hälfte das heißt wir ermitteln den Mittelpunkt des Feldes und ziehen die Hälfte der Größe der Einheit ab
        '... und wie breit ist es
        With Grafikengine.szfScale
            .Height = T.EinzelbildGröße.Height * Zoomfaktor
            .Width = T.EinzelbildGröße.Width * Zoomfaktor
        End With
        'jetzt wird es in den Backbuffer gezeichnet
        Grafikengine.Sprite.Draw2D(T.TexturBild, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
        If Frame >= Frames Then
            Return False
        End If

        Frame += 1
        If Frame >= Frames Then
            Frame = Frames
        End If
        Return True
    End Function
    Public Sub New(ByVal Musikspielen As Boolean, ByVal Schlacht As Integer)
        Me.Schlacht = Schlacht
    End Sub
    Public Overridable Sub RemoveHandles()

    End Sub
    Public Shared Sub DeleteAnimationsTexturen()
        For Each T In Texturen
            T.TexturBild.Dispose()
        Next
        ReDim Texturen(-1)
    End Sub
End Class